"""
参数:
1.位置参数
    个数和顺序定义和调用必须一致
2.关键字参数
    调用时，参数的窗体以：key=value的形式
3.默认参数
    函数定义时，就提供了默认值
    调用时，可以传递也可以不传
4.可变参数
    参数个数不确定，可变，不定长
    1)定义时用一个星号 * 调用时用位置传递
    2）定义时用2个星号** 调用时用关键字传递
"""


def user_info1(name, age, gender):
    print(f'姓名:{name},年龄:{age}，性别:{gender}')


# 调用时，参数的个数和顺序与定义的一致
user_info1('tom', 18, 'male')
# 个数必须一致
# user_info1('zs',19)
# 顺序不一致的话，赋值也会乱
# user_info1(19,'male','ls')

# 调用时，使用"key=value"形式传递参数
# 关键字参数，顺序没有关系
user_info1(age=18, name='lily', gender='female')


def user_info2(name, age, gender='male'):
    print(f'姓名:{name},年龄:{age}，性别:{gender}')
    user_info2('zs', 18)
    user_info2('ls', 19, 'female')


def user_info3(*args):
    return args


def user_info4(**kwargs):
    return kwargs


# 调用 位置传递:返回的是元组类型
result3 = user_info3('ton', 18)
print(result3)
# 调用 关键字，返回的是字典
result4 = user_info4(name='ton', age=18)
print(result4)




def user_info5(*key):
    result = 0
    for i in key:
        result += i
    return result

r1=user_info5(2,4)
r2=user_info5(3,5,7,8)
print(r1)
print(r2)


a,b=2,3
print(f'a={a},b={b}')
a,b=b,a
print(f'a={a},b={b}')

